<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class C_Funcionario extends MY_Controller {

	function __construct()
	{
		parent::__construct();
                $this->load->helper('html');
                $this->load->helper('url');
	}

	function index(){
            
            $this->load->view('funcionario/v_busca_funcionario');
	            
	}

        function listarFuncionario(){
           
            extract($_POST);
            
            if(@$nome && !$funcionarioId){
                
                $nome = "'%". strtoupper($nome)."%'";
                $queryFuncionario = $this->em->createQuery('SELECT f FROM models\funcionario f WHERE upper(f.nomeFunc) LIKE  '.$nome);
               
                foreach ($queryFuncionario->getResult() as $valueFunc) {
                    
                    $funcionarioId = $valueFunc->getFuncionarioId();

                }

            } else if(@$matricula && !$funcionarioId){
                
                $matricula = "'%". $matricula."%'";
                $queryFuncionario = $this->em->createQuery('SELECT f FROM models\funcionario f WHERE f.matriculaFunc LIKE  '.$matricula);
               
                foreach ($queryFuncionario->getResult() as $valueFunc) {
                    
                    $funcionarioId = $valueFunc->getFuncionarioId();

                }
                
            }

            /**
             * Baseado nos parametros recebidos através da requisição ajax
             * é realizada a recuperação do objeto
             */
            $funcionario = $this->em->find('models\funcionario',$funcionarioId);
           
            
            /**
             * array para recuperar o valor de um determinado índice
             * @todo Checar se a utilização de um Enum torna o código mais legível e
             * sem perdas na execução
             */
            $sexoDesc           = array(0 => 'Não Informado',1=>'Feminino',2=>'Masculino');
            $estadoCivilDesc    = array(0 => 'Não Informado',1=>'Solteiro',2=>'Casado',3=>'Viúvo',4=>'Desquitado',5=>'Separado(a) Judicialmente');
            $origemEtnicaDesc   = array(0 => 'Não Informado',1=>'Negra',2=>'Branca',3=>'Parda',4=>'Ind&iacute;gena',5=>'Oriental',6=>'Outra');
            $tpEnderecoDesc     = array(0 => 'Não Informado',1=>'Residencial',2=>'Comercial');
            $siglaUf            = array(1=>'AC',2=>'AL',3=>'AP',4=>'AM',5=>'BA',6=>'CE',7=>'DF',8=>'ES',
                                        9=>'GO',10=>'MA',11=>'MT',12=>'MS',13=>'MG',14=>'PA',15=>'PB',16=>'PR',
                                        17=>'PE',18=>'PI',19>'RJ',20=>'RN',21=>'RS',22=>'RO',23=>'RR',24=>'SC',
                                        25=>'SP',26=>'SE',27=>'TO');
            $opValeDesc         = array(0 => 'Não Informado',1=>'Sim',2=>'N&atilde;o');
            
            /**Passa o objeto cidade para a view*/
            $cidadeList = $this->em->createQuery('SELECT c FROM models\cidade c');
            $data['cidadeList'] = $cidadeList;
            
            /**Passa o objeto uf para a view*/
            $ufList = $this->em->createQuery('SELECT u FROM models\uf u');
            $data['ufList'] = $ufList;
                 
            /**
             * Recupera o objeto cidade e uf da naturalidade do funcionario
             */
            if($funcionario->getNaturalCidadeFunc()){
                
                $cidadeNatural = $this->em->find('models\cidade',$funcionario->getNaturalCidadeFunc());
                $ufNatural = $this->em->find('models\uf',$cidadeNatural->getUf());
                
            }
            
            
            
            /**
             * Formatação de datas para exibição no formato utilizado no Brasil
             */
            if($funcionario->getDtNascimentoFunc()){
                
                $dtNasc = explode('-',$funcionario->getDtNascimentoFunc());
                $dtNasc = $dtNasc[2].'/'.$dtNasc[1].'/'.$dtNasc[0];
            }
            if($funcionario->getDtAdmissao()){
                
                $dtAdmissao = explode('-',$funcionario->getDtAdmissao());
                $dtAdmissao = $dtAdmissao[2].'/'.$dtAdmissao[1].'/'.$dtAdmissao[0];
                
            }
            if($funcionario->getDtEmissaoFunc()){
                
                $dtEmissaoIdt = explode('-',$funcionario->getDtEmissaoFunc());
                $dtEmissaoIdt = $dtEmissaoIdt[2].'/'.$dtEmissaoIdt[1].'/'.$dtEmissaoIdt[0];
            }
            if($funcionario->getDtAfastamento()){
                
                $dtAfast = explode('-',$funcionario->getDtAfastamento());
                $dtAfast = $dtAfast[2].'/'.$dtAfast[1].'/'.$dtAfast[0];
                
            }

            /**
             * Passagem dos atributos dos objetos relacionados para a view.
             * Optar sempre por esta construção para evitar codificação
             * na camada de visão
             */
            $data['nome']               = $funcionario->getNomeFunc();
            $data['matricula']          = $funcionario->getMatriculaFunc();
            $data['cpf']                = $funcionario->getCpfFunc();
            $data['email']              = $funcionario->getEmailFunc();
            $data['estadoCivil']        = $estadoCivilDesc[$funcionario->getEstadoCivilFunc()];//
            $data['estadoCivilCod']     = $funcionario->getEstadoCivilFunc();
            $data['identidade']         = $funcionario->getIdentidadeFunc();
            $data['sexo']               = $sexoDesc[$funcionario->getSexoCod()];//
            $data['sexoCod']            = $funcionario->getSexoCod();
            $data['dataNascimento']     = $dtNasc;
            $data['dataAdmissao']       = $dtAdmissao;
            $data['dataAfastamento']    = @$dtAfast;
            $data['dataExpIdt']         = @$dtEmissaoIdt;
            $data['cidadeNaturalCod']   = $funcionario->getNaturalCidadeFunc();
            $data['naturalidade']       = $cidadeNatural->getCidadeDesc().'/'.$ufNatural->getUfSigla();
            $data['foneFixo']           = $funcionario->getFoneResidenciaFunc();
            $data['foneCelular']        = $funcionario->getCelularFunc();
            $data['logradouro']         = $funcionario->getLogradouroFunc();
            $data['bairro']             = $funcionario->getBairroFunc();
            $data['cep']                = $funcionario->getCepEnderecoFunc();
            $data['complemento']        = $funcionario->getComplementoEnderecoFunc();
            $data['cidade']             = $funcionario->getCidadeFunc();
            $data['uf']                 = $funcionario->getUfFunc();
            $data['expedidorIdt']       = $funcionario->getExpedidortIdtFunc();
            $data['ufExpedidorIdt']     = $funcionario->getUfExpedidorFunc();
            $data['opValeTrnpDesc']     = $opValeDesc[$opValeDesc];
            $data['opValeTrasporte']    = $funcionario->getOpValeTransp();
            $data['estabelecimento']    = $funcionario->getEstabelecimentoCod();
            $data['siglaUf']            = $siglaUf[$funcionario->getUfExpedidorFunc()];
            
            if($funcionario->getOpValeTransp())
                $data['opValeTrnpDesc']     = $opValeDesc[$funcionario->getOpValeTransp()];
//            if($f2->get)
//                $data['tipoEndereco']       = $tpEnderecoDesc[(int)$tipoEndereco];
//            $data['tipoEnderecoCod']    = $tipoEndereco;

            if($funcionario->getOrigemEtnicaFunc())
                $data['origemEtnica']       = $origemEtnica[$funcionario->getOrigemEtnicaFunc()];
            
            $data['origemEtnicaCod']        = $funcionario->getOrigemEtnicaFunc();

            $this->load->view('funcionario/i_lista_funcionario',$data);

        }
        
        function listarFuncionarioDataTable(){
            
            extract($_POST);
            
            if(@$nome && !$matricula){
                
                $nome = "'%". strtoupper($nome)."%'";
                $queryFuncionario = $this->em->createQuery('SELECT f FROM models\funcionario f WHERE f.statusFunc = 1 AND upper(f.nomeFunc) LIKE  '.$nome);
  

            } else if(@$matricula){
                
                $matricula = "'%". $matricula."%'";
                $queryFuncionario = $this->em->createQuery('SELECT f FROM models\funcionario f WHERE f.statusFunc AND f.matriculaFunc LIKE  '.$matricula);
                
            }
            $data['queryFuncionario'] = $queryFuncionario;

            $this->load->view('funcionario/inc/i_lista',$data);
             
        }
        
        function addFuncionario(){
            
            $cidadeList = $this->em->createQuery('SELECT c FROM models\cidade c');
            $ufList = $this->em->createQuery('SELECT u FROM models\uf u');
            
            $data['cidadeList'] = $cidadeList;
            $data['ufList']     = $ufList;
         
            $this->load->view('funcionario/v_novo_funcionario',$data);
        }
        
        function executaCadastroFuncionario(){

           extract($_POST);
           
           /**
             * array para recuperar o valor de um determinado índice
             * @todo Checar se a utilização de um Enum torna o código mais legível e
             * sem perdas na execução
             */
            $sexoDesc           = array(0 => 'Não Informado',1=>'Feminino',2=>'Masculino');
            $estadoCivilDesc    = array(0 => 'Não Informado',1=>'Solteiro',2=>'Casado',3=>'Viúvo',4=>'Desquitado',5=>'Separado(a) Judicialmente');
            $origemEtnicaDesc   = array(0 => 'Não Informado',1=>'Negra',2=>'Branca',3=>'Parda',4=>'Ind&iacute;gena',5=>'Oriental',6=>'Outra');
            $tpEnderecoDesc     = array(0 => 'Não Informado',1=>'Residencial',2=>'Comercial');
            $siglaUf            = array(1=>'AC',2=>'AL',3=>'AP',4=>'AM',5=>'BA',6=>'CE',7=>'DF',8=>'ES',
                                        9=>'GO',10=>'MA',11=>'MT',12=>'MS',13=>'MG',14=>'PA',15=>'PB',16=>'PR',
                                        17=>'PE',18=>'PI',19>'RJ',20=>'RN',21=>'RS',22=>'RO',23=>'RR',24=>'SC',
                                        25=>'SP',26=>'SE',27=>'TO');
            $opValeDesc         = array(0 => 'Não Informado',1=>'Sim',2=>'N&atilde;o');


           /****Conversao de datas no padrão do MySQL***/
            $dtAdmissao = explode('/', $dataAdmissao);
            $dateM =  strtotime($dtAdmissao[2].'-'.$dtAdmissao[1].'-'.$dtAdmissao[0]);
            $nDataAdmissao = date('Y-m-d', $dateM);
            
            $dtNascimento = explode('/',$dataNascimento);
            $dateN =  strtotime($dtNascimento[2].'-'.$dtNascimento[1].'-'.$dtNascimento[0]);
            $nDataNascimento = date('Y-m-d', $dateN);
            
            if($dataAfastamento){
                $dtAfastamento = explode('/',$dataAfastamento);
                $dateC =  strtotime($dtAfastamento[2].'-'.$dtAfastamento[1].'-'.$dtAfastamento[0]);
                $nDataAfastamento = date('Y-m-d', $dateC);        
            }
            
            if($dtExpIdt){
                $dtExp = explode('/',$dtExpIdt);
                $dateT =  strtotime($dtExp[2].'-'.$dtExp[1].'-'.$dtExp[0]);
                $nDataExpIdt = date('Y-m-d', $dateT);    
            }

            $matriculaTmp = rand(1,999);
            $matricula = str_pad($matriculaTmp, 6, "0", STR_PAD_LEFT);
      
//           //Abertura da transação
            $this->em->getConnection()->beginTransaction();
             try {
                 
                //Criando instancia de Funcionario
                $funcionario = new models\Funcionario;

                 //Atribuindo valores ao funcionario
                $funcionario->setBairroFunc(utf8_decode($bairro));
                $funcionario->setCelularFunc($celular);
                $funcionario->setCepEnderecoFunc($cep);
                $funcionario->setCidadeFunc($cidade);
                $funcionario->setComplementoEnderecoFunc($complemento);
                $funcionario->setCpfFunc($cpf);
                $funcionario->setDtAfastamento($nDataAfastamento);
                $funcionario->setDtAdmissao($nDataAdmissao);
                $funcionario->setDtEmissaoFunc($nDataExpIdt);
                $funcionario->setDtNascimentoFunc($nDataNascimento);
                $funcionario->setEstabelecimentoCod($locacao);
                $funcionario->setExpedidortIdtFunc($expIdt);
                $funcionario->setFoneResidenciaFunc($telefone);
                
//                $funcionario->setFuncaoCod($funcaoCod);
                $funcionario->setIdentidadeFunc($identidade);
                $funcionario->setLogradouroFunc($logradouro);
                $funcionario->setMatriculaFunc($matricula);
                $funcionario->setNomeFunc($nome);
                $funcionario->setSexoCod($sexo);
                $funcionario->setUfExpedidorFunc($ufExpIdt);
                $funcionario->setUfFunc($uf);
                $funcionario->setEmailFunc($email);
                $funcionario->setStatusFunc(1);
                $funcionario->setNaturalCidadeFunc($naturalCidade);
                $funcionario->setOpValeTransp($opVale);
                $funcionario->setEstadoCivilFunc($estadoCivil);
                $funcionario->setOrigemEtnicaFunc($origemEtnica);
               
                //gravação do funcionario
                $this->em->persist($funcionario);
                
                $this->em->flush();
               
                $vale = new \models\Vale;
                //Atribuindo valores do vale transporte
                $vale->setDiasSemana($diasSemana);//
                $vale->setDiasUteis($qtdDias);//
                $vale->setFuncionarioId($funcionario->getFuncionarioId());//
                $vale->setValeQtdDois($qtdValeDois);//
                $vale->setValeQtdTres($qtdValeTres);//
                $vale->setValeQtdUm($qtdValeUm);
                $vale->setValeTipoDois($tipoValeDois);//
                $vale->setValeTipoTres($tipoValeTres);
                $vale->setValeTipoUm($tipoValeUm); 
                
                //Prepara a gravação do vale transporte
                $this->em->persist($vale);
                $this->em->flush();

                //Se não houver nenhuma exceção, é confirmada a gravação do objeto
                $this->em->getConnection()->commit();
               
                /**
                 * Recupera o objeto cidade e uf da naturalidade do aluno
                 */     
                if($naturalCidade){
                    $cidadeNatural = $this->em->find('models\cidade',$funcionario->getNaturalCidadeFunc());
                    $ufNatural = $this->em->find('models\uf',$cidadeNatural->getUf());
                }



                /**Passa o objeto cidade para a view*/
                $cidadeList = $this->em->createQuery('SELECT c FROM models\cidade c');
                $data['cidadeList'] = $cidadeList;

                /**Passa o objeto uf para a view*/
                $ufList = $this->em->createQuery('SELECT u FROM models\uf u');
                $data['ufList'] = $ufList;

                
                /**
                 * Passagem dos atributos dos objetos relacionados para a view.
                 * Optar sempre por esta construção para evitar codificação
                 * na camada de visão
                 */
                $data['nome']               = $funcionario->getNomeFunc();
                $data['matricula']          = $funcionario->getMatriculaFunc();
                $data['cpf']                = $funcionario->getCpfFunc();
                $data['email']              = $funcionario->getEmailFunc();
                $data['estadoCivil']        = $estadoCivilDesc[$funcionario->getEstadoCivilFunc()];//
                $data['estadoCivilCod']     = $funcionario->getEstadoCivilFunc();
                $data['identidade']         = $funcionario->getIdentidadeFunc();
                $data['sexo']               = $sexoDesc[$funcionario->getSexoCod()];//
                $data['sexoCod']            = $funcionario->getSexoCod();
                $data['dataNascimento']     = $dataNascimento;
                $data['dataAdmissao']       = $dataAdmissao;
                $data['dataAfastamento']    = @$dtAfastamento;
                $data['dataExpIdt']         = @$dtExpIdt;
                $data['cidadeNaturalCod']   = $funcionario->getNaturalCidadeFunc();
                $data['naturalidade']       = $cidadeNatural->getCidadeDesc().'/'.$ufNatural->getUfSigla();
                $data['foneFixo']           = $telefone;
                $data['foneCelular']        = $celular;
                $data['logradouro']         = $logradouro;
                $data['bairro']             = $bairro;
                $data['cep']                = $cep;
                $data['complemento']        = $complemento;
                $data['cidade']             = $cidade;
                $data['uf']                 = $uf;
                $data['expedidorIdt']       = $expIdt;
                $data['ufExpedidorIdt']     = $ufExpIdt;
                if($tipoEndereco)
                    $data['tipoEndereco']       = $tpEnderecoDesc[(int)$tipoEndereco];
                $data['tipoEnderecoCod']    = $tipoEndereco;

                $data['origemEtnicaCod']    = $funcionario->getOrigemEtnicaFunc();
                $data['diasSemana']         = $diasSemana;
                $data['tipoValeUm']         = $tipoValeUm;
                $data['tipoValeDois']       = $tipoValeDois;
                $data['tipoValeTres']       = $tipoValeTres;
                $data['qtdDias']            = $qtdDias;
                $data['qtdValeUm']          = $qtdValeUm;
                $data['qtdValeDois']        = $qtdValeDois;
                $data['qtdValeTres']        = $qtdValeTres;
                if($opVale)
                    $data['opValeTrnpDesc']     = $opValeDesc[$opVale];
                

                
                $this->load->view('funcionario/i_lista_funcionario',$data);

             } catch ( Exception $e ) {
                 //Rollback na gravação e lançamento de exceção
                 $this->em->getConnection()->rollback();
                 $this->em->close();
                 throw $e ;
                 
                 echo 999;
            }
        }
        
        function listaDocente(){
            
            $this->load->view('funcionario/inc/cbo_docente',$data);
            
        }
        
        function detalharDisciplina(){

            extract($_POST);

            $disciplina = $this->em->find('models\disciplina',$id);

            
            $data['id']         = $id;
            $data['tipo']       = ($disciplina->getDisciplinaTipo() == 1) ? 'Obrigat&oacute;ria' : 'Opcional';
            $data['titulo']     = $disciplina->getDisciplinaDescResumida();
            $data['status']     = ($disciplina->getDisciplinaStatus() == 1) ? 'Ativa' : 'Inativa';
            $data['descricao']  = $disciplina->getDisciplinaDesc();

            $this->load->view('disciplina/p_info_disciplina',$data);;

        }

        function gravarDisciplina(){
            extract($_POST);
            
            $disciplina = new models\disciplina;

            $disciplina->setDisciplinaDesc($descDisc);
            $disciplina->setDisciplinaDescResumida($descDiscResumida);
            $disciplina->setDisciplinaTipo($tipoDisc);
            $disciplina->setDisciplinaStatus(1);

            $this->em->persist($disciplina);
            $this->em->flush();

            $linhaRetorno  ='<tr class="gradeA" style="font-size: 10px ; border: #000 1px solid " id="tr_'.$disciplina->getDisciplinaCod().'">
                                <td><div align="center" id="titulo_'.$disciplina->getDisciplinaCod().'">'.$disciplina->getDisciplinaDescResumida().'</div></td>
                                <td><div align="center" id="desc_'.$disciplina->getDisciplinaCod().'">'. $disciplina->getDisciplinaDesc().'</div></td>
                                <td>
                                <div align="center">
                                    <a href="#" id="lnkview">
                                        <img alt="" src="'. base_url() . 'assets/images/ico_view.png" border="0" title="Visualizar" onclick="detalharDisciplina('.$disciplina->getDisciplinaCod().')" />
                                    </a>
                                </div>
                            </td>
                            <td>
                                <div align="center">
                                    <a href="#" id="lnkupdate">
                                        <img alt="" src="'.base_url() . 'assets/images/refresh.png" border="0" title="Atualizar" onclick="updateDisciplina('.$disciplina->getDisciplinaCod().')"/>
                                    </a>
                                </div>
                            </td>
                            <td>
                                <div align="center">
                                    <a href="#" id="lnkdelete">
                                        <img alt="" src="'. base_url() . 'assets/images/delete.png" border="0" title="Excluir" width="20" height="20" onclick="excluirDisciplina('.$disciplina->getDisciplinaCod().')"/>
                                    </a>
                                </div>
                            </td>
                         </tr>';

            echo TRUE.'@'.$linhaRetorno;
        }

        function listarDisciplina(){

            $data['disciplinaList'] = $this->em->createQuery('SELECT d FROM models\disciplina d WHERE d.disciplinaStatus = 1');

            $this->load->view('disciplina/v_lista_disciplina',$data);

        }

        function buscaDisciplina(){

            $this->load->view('disciplina/v_busca_disciplina');
        }

        function buscaDisciplinaLista(){

            extract($_POST);
            $descDiscResumida = "'%". strtoupper($descDiscResumida)."%'";
           
            $data['disciplinaList'] = $this->em->createQuery('SELECT d FROM models\disciplina d WHERE d.disciplinaStatus = 1 AND upper(d.disciplinaDescResumida) LIKE    '.$descDiscResumida );
            
            $this->load->view('disciplina/i_lista_disciplina',$data);

        }

        function updateDisciplina(){
            extract($_POST);

            $disciplina = $this->em->find('models\disciplina',$id);

            $data['id']         = $id;
            $data['tipo']       = $disciplina->getDisciplinaTipo();
            $data['titulo']     = $disciplina->getDisciplinaDescResumida();
            $data['descricao']  = $disciplina->getDisciplinaDesc();
   
            $this->load->view('disciplina/v_update_disciplina',$data);
        }

        function executaUpdate(){

            extract($_POST);

            $disciplina = $this->em->find('models\disciplina',$id);

            $disciplina->setDisciplinaDesc($descricao);
            $disciplina->setDisciplinaDescResumida($titulo);
            $disciplina->setDisciplinaTipo($tipo);

            $this->em->merge($disciplina);

            $this->em->flush();
            
            echo TRUE;

        }

        function executaExclusao(){

            extract($_POST);

            $disciplina = $this->em->find('models\disciplina',$id);

            $disciplina->setDisciplinaStatus(0);

            $this->em->merge($disciplina);

            $this->em->flush();

            echo TRUE.'@'.$disciplina->getDisciplinaCod();

        }

        function buscaPorNome(){

            $descDiscResumida = "'%". strtoupper($_POST['param'])."%'";

            $dados = $this->em->createQuery('SELECT d FROM models\disciplina d WHERE d.disciplinaStatus = 1 AND upper(d.disciplinaDescResumida) LIKE    '.$descDiscResumida );

            foreach ($dados->getResult() as $key=>$value){

                echo "$key|$value\n";

            }

        }

        function testeview(){
            $this->load->view('teste');
        }
	
}